package com.css.sword.knowing.search;

import java.io.IOException;
import java.util.List;

import com.css.sword.knowing.search.comm.SearchConst;
import com.css.sword.knowing.search.exception.TooBigException;
import com.css.sword.knowing.search.util.ToJson;

/**
 * 创建索引属性类 创建索引输入项 indexName:索引名，字符串类型 type:索引类型，字符串类型
 * indexDocs:封装被索引数据，是IndexDocument类型的列表。一个IndexDocument代表一条索引数据。
 * 例如如果需要对数据库的一条记录做索引，可以把每个字段作为Map的key，字段值作为Map的值。
 * systemID：每个需要创建索引的系统，都会分配一个唯一的系统标识。
 * 
 * 以上属性都为必填项。
 */
public class IndexInput {

    private String indexName;
    private String typeName;
    private List<IndexDocument> indexDocs;
    private String systemID;
    private String indexIDFieldName;

    public String getIndexIDFieldName() {
        return indexIDFieldName;
    }

    public void setIndexIDFieldName(String indexIDFieldName) {
        this.indexIDFieldName = indexIDFieldName;
    }

    /**
     * 获取索引名称
     * 
     * @return 索引名称
     */
    public String getIndexName() {
        return indexName;
    }

    /**
     * 设置索引名称
     * 
     * @param indexName
     *            索引名称
     */
    public void setIndexName(String indexName) {
        this.indexName = indexName;
    }

    /**
     * 获取类型名称
     * 
     * @return 索引类型名称
     */
    public String getTypeName() {
        return typeName;
    }

    /**
     * 设置索引类型名称
     * 
     * @param typeName
     *            索引类型名称
     */
    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }

    /**
     * 获取待创建索引的文档列表
     * 
     * @return 文档列表
     */
    public List<IndexDocument> getIndexDocs() {
        return indexDocs;
    }

    /**
     * 设置待创建索引的文档列表
     * 
     * @param data
     *            文档列表
     * @throws TooBigException
     */
    public void setIndexDocs(List<IndexDocument> data){
//        long size = getSize(data);
//        if (SearchConst.BULK_SIZE < size) {
//             String message = "数据过大，数据尺寸限制：" + SearchConst.BULK_SIZE +
//             "字节，实际数据：" + size;
//             throw new TooBigException(message);
//        }
        this.indexDocs = data;
    }

    /**
     * 获取当前系统标识字段值
     * 
     * @return 当前系统标识字段值
     */
    public String getSystemID() {
        return systemID;
    }

    /**
     * 设置当前系统标识字段，默认值为：SearchConst.PUBLIC_PRIV;可以作为简单的权限控制
     * 
     * @param systemID
     *            系统标识字段值
     */
    public void setSystemID(String systemID) {
        this.systemID = systemID;
    }

    /**
     * 获取待创建索引文档数目
     * 
     * @param data
     *            文档列表
     * @return 文档数目
     * @throws IOException 
     */
    @SuppressWarnings("rawtypes")
    private long getSize(List<IndexDocument> data) throws IOException {
        long size = 0;
        for (IndexDocument m : data) {
        	size = size + ToJson.mapSize(m.getData(), SearchConst.SYSTEMIDTEMPLATE);
        }
        return size;
    }

}
